package com.lxy;

import java.util.List;
import java.util.Map;

/**
 * Excel文件读取演示类
 * 演示如何读取"快手字节红果短剧监测片单表20251108-5.xlsx"文件
 */
public class ExcelDemo {
    
    public static void main(String[] args) {
        // Excel文件路径
        String excelFilePath = "快手字节红果短剧监测片单表20251108-5.xlsx";
        
        System.out.println("=== Excel文件读取演示 ===\n");
        
        // 演示1: 筛选第一列等于"沈启文"的数据
        demonstrateFilterByFirstColumn(excelFilePath);
        
        // 演示2: 获取筛选后第二列的数据
        demonstrateGetSecondColumnData(excelFilePath);
        
        // 演示3: 读取所有数据
        demonstrateReadAllData(excelFilePath);
    }
    
    /**
     * 演示筛选第一列等于"沈启文"的数据
     */
    private static void demonstrateFilterByFirstColumn(String filePath) {
        System.out.println("1. 筛选第一列等于'沈启文'的所有数据：");
        System.out.println("----------------------------------------");
        
        try {
            // 筛选第一列（索引0）等于"沈启文"的数据
            List<Map<String, Object>> filteredData = ExcelReader.readAndFilterExcel(filePath, 0, "沈启文");
            
            if (filteredData.isEmpty()) {
                System.out.println("没有找到第一列等于'沈启文'的数据");
            } else {
                System.out.println("找到 " + filteredData.size() + " 条匹配的数据：");
                
                // 打印每一条数据
                for (int i = 0; i < filteredData.size(); i++) {
                    System.out.println("第 " + (i + 1) + " 条数据：");
                    Map<String, Object> row = filteredData.get(i);
                    
                    // 打印每个字段
                    for (Map.Entry<String, Object> entry : row.entrySet()) {
                        System.out.println("  " + entry.getKey() + ": " + entry.getValue());
                    }
                    System.out.println();
                }
            }
            
        } catch (Exception e) {
            System.err.println("读取Excel文件时出错: " + e.getMessage());
            e.printStackTrace();
        }
        
        System.out.println("\n");
    }
    
    /**
     * 演示获取筛选后第二列的数据
     */
    private static void demonstrateGetSecondColumnData(String filePath) {
        System.out.println("2. 获取第一列等于'沈启文'的数据中第二列的所有值：");
        System.out.println("----------------------------------------");
        
        try {
            // 获取第一列（索引0）等于"沈启文"的数据中第二列（索引1）的值
            List<Object> secondColumnData = ExcelReader.getColumnData(filePath, 0, "沈启文", 1);
            
            if (secondColumnData.isEmpty()) {
                System.out.println("没有找到匹配的数据");
            } else {
                System.out.println("第二列的数据（共 " + secondColumnData.size() + " 个值）：");
                for (int i = 0; i < secondColumnData.size(); i++) {
                    System.out.println("  第 " + (i + 1) + " 个值: " + secondColumnData.get(i));
                }
            }
            
        } catch (Exception e) {
            System.err.println("读取Excel文件时出错: " + e.getMessage());
            e.printStackTrace();
        }
        
        System.out.println("\n");
    }
    
    /**
     * 演示读取所有数据
     */
    private static void demonstrateReadAllData(String filePath) {
        System.out.println("3. 读取Excel文件的所有数据（前5条）：");
        System.out.println("----------------------------------------");
        
        try {
            // 读取所有数据
            List<Map<String, Object>> allData = ExcelReader.readAllData(filePath);
            
            if (allData.isEmpty()) {
                System.out.println("Excel文件为空");
            } else {
                System.out.println("Excel文件共有 " + allData.size() + " 条数据");
                
                // 只显示前5条数据作为示例
                int displayCount = Math.min(5, allData.size());
                System.out.println("显示前 " + displayCount + " 条数据：\n");
                
                for (int i = 0; i < displayCount; i++) {
                    System.out.println("第 " + (i + 1) + " 条数据：");
                    Map<String, Object> row = allData.get(i);
                    
                    for (Map.Entry<String, Object> entry : row.entrySet()) {
                        System.out.println("  " + entry.getKey() + ": " + entry.getValue());
                    }
                    System.out.println();
                }
                
                if (allData.size() > 5) {
                    System.out.println("... 还有 " + (allData.size() - 5) + " 条数据未显示");
                }
            }
            
        } catch (Exception e) {
            System.err.println("读取Excel文件时出错: " + e.getMessage());
            e.printStackTrace();
        }
    }
    
    /**
     * 高级用法演示：多条件筛选
     */
    public static void demonstrateAdvancedFiltering(String filePath) {
        System.out.println("4. 高级用法：多条件筛选演示");
        System.out.println("----------------------------------------");
        
        try {
            // 先读取所有数据
            List<Map<String, Object>> allData = ExcelReader.readAllData(filePath);
            
            // 自定义筛选逻辑：筛选第一列包含"沈"字的数据
            System.out.println("筛选第一列包含'沈'字的数据：");
            
            for (Map<String, Object> row : allData) {
                // 假设第一列的键名是表头的第一个字段
                Object firstColumnValue = null;
                for (Map.Entry<String, Object> entry : row.entrySet()) {
                    firstColumnValue = entry.getValue();
                    break; // 只取第一个字段
                }
                
                if (firstColumnValue != null && firstColumnValue.toString().contains("沈")) {
                    System.out.println("匹配的数据：");
                    for (Map.Entry<String, Object> entry : row.entrySet()) {
                        System.out.println("  " + entry.getKey() + ": " + entry.getValue());
                    }
                    System.out.println();
                }
            }
            
        } catch (Exception e) {
            System.err.println("高级筛选时出错: " + e.getMessage());
            e.printStackTrace();
        }
    }
}
